#!/usr/bin/env python3
# -*- coding: utf-8 -*-
##############################################
# @Author: DengLibin 榆霖
# @Date: Create in 2022-03-04 09:31:01
# @Description: 文件读写
##############################################
'module name'
__author__ = 'DengLibin'

FILE_PATH = r'C:\Users\mdjro\Desktop\备忘.txt'
#if __name__ == '__main__':
print("----------------------------------------------------------------------")
# 读文件
# 要以读文件的模式打开一个文件对象，使用Python内置的open()函数，传入文件名和标示符
# 由于文件读写时都有可能产生IOError，一旦出错，后面的f.close()就不会调用。所以，为了保证无论是否出错都能正确地关闭文件，我们可以使用try ... finally来实现
try:
    f = open(FILE_PATH, 'r', encoding='utf-8')
    print(f.read())
finally:
    if f:
        f.close()
print("----------------------------------------------------------------------")        
# 但是每次都这么写实在太繁琐，所以，Python引入了with语句来自动帮我们调用close()方法：
with open(FILE_PATH, 'r', encoding='utf-8') as f:
    print(f.read())
    
# 调用read()会一次性读取文件的全部内容，如果文件有10G，内存就爆了，所以，要保险起见，可以反复调用read(size)方法，每次最多读取size个字节的内容。
# 另外，调用readline()可以每次读取一行内容，调用readlines()一次读取所有内容并按行返回list。
# 因此，要根据需要决定怎么调用。

# 如果文件很小，read()一次性读取最方便；如果不能确定文件大小，反复调用read(size)比较保险；如果是配置文件，调用readlines()最方便：
print("----------------------------------------------------------------------")
with open(FILE_PATH, 'r', encoding='utf-8') as f:
    for line in f.readlines():
        print(line)



# 写文件
print("----------------------------------------------------------------------")
with open(r'C:\Users\mdjro\Desktop\234.txt', 'w', encoding='utf-8') as f:
    f.write('hello world 中文')

# 拷贝图片
print("----------------------------------------------------------------------")
with open(r'C:\Users\mdjro\Desktop\123.jpg', 'rb') as rf:
    with open(r'C:\Users\mdjro\Desktop\123_copy.jpg', 'wb') as wf:
        while True:
            buf = rf.read(1024)
            if buf:
                wf.write(buf)
            else:
                break
    